package com.glacier.proxy.cglib;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * date 2021-12-30 17:05
 *
 * @author glacier
 * @version 1.0
 */
public class DebugMethodInterceptor implements MethodInterceptor {
	/**
	 * 拦截被代理类中的方法
	 *
	 * @param obj    代理对象（增强的对象）
	 * @param method 被拦截的方法（需要增强的方法）
	 * @param args   方法入参
	 * @param proxy  用于调用原始方法
	 * @return
	 * @throws Throwable
	 */
	@Override
	public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
		//调用方法之前，我们可以添加自己的操作
		System.out.println("before method " + method.getName());
		Object object = proxy.invokeSuper(obj, args);
		//调用方法之后，我们同样可以添加自己的操作
		System.out.println("after method " + method.getName());
		return object;
	}
}
